1. Data preprocessing
  1. Read FlowJo files into R.
  2. Create a data frame with intensity measurements for each marker for all samples within the experiment to be analyzed.
  3. Harmonize data
  4. Create dataframe
  5. Create a Seurat object
  1. Cluster data
  1. Explore clustering methods and parameters.
  2. Determine cluster stability
  3. Create clusters with best conditions
  1. Annotate clusters with cell types.
  1. Predict cell types by correlation matrix
  2. Visualize expression by cluster for manual annotation
  3. With annotated an data set train Random Forest classifier to predict cell types.
  4. With annotated an data set predict cell types with Seurat label transfer.
  5. For each prediction calculate the top most predicted cell per cluster and take a consensus to annotate clusters.
  6. Add cluster annotations.
# load necessary libraries 
library(Seurat)
Attaching SeuratObject
library(dplyr) 
library(ggplot2)

Attaching package: ‘ggplot2’

The following object is masked from ‘package:CelltypeR’:

    annotate
library(CelltypeR)

Preprocessing

Read in the flow data This data should be the gated live cells.
All samples need to be in one folder.


input_path <- "/Users/rhalenathomas/Documents/Data/FlowCytometry/PhenoID/FlowDataFiles/9MBO"
output_path <- "/Users/rhalenathomas/Documents/Data/FlowCytometry/PhenoID/Analysis/testingLibrary/"

# 1.a Read in FlowJo Files 

# In Figure 3 downsample to 9000 where possible
# Here downsample to 1000 to speed up computation
flowset <- fsc_to_fs(input_path, downsample = 1000)
# down sample can be a number, 'none' or 'min'

# look at file names and rename with shorter sample names

sampleNames(flowset)
[1] "2020-03-06- export_bioinfo_3450c_live cells.fcs"      
[2] "2020-03-06- export_bioinfo_AIW_live cells.fcs"        
[3] "2020-03-06- export_bioinfo_AJG_live cells.fcs"        
[4] "2020-03-17- export_bioinfo_old 3450c_live cells.fcs"  
[5] "2020-03-17- export_bioinfo_old AIW_live cells.fcs"    
[6] "2020-03-17- export_bioinfo_old AJG_live cells.fcs"    
[7] "2020-03-17- export_bioinfo_young 3450c_live cells.fcs"
[8] "2020-03-17- export_bioinfo_young AIW_live cells.fcs"  
[9] "2020-03-17- export_bioinfo_young AJG_live cells.fcs"  
sampleNames(flowset) <- sampleNames(flowset) <- c("3450_0306","AIW002_0306","AJG001C_0306","3450_0317A","AIW002_0317A","AJG001C_0317A","3450_0317B","AIW002_0317B","AJG001C_0317B")
sampleNames(flowset)
[1] "3450_0306"     "AIW002_0306"   "AJG001C_0306" 
[4] "3450_0317A"    "AIW002_0317A"  "AJG001C_0317A"
[7] "3450_0317B"    "AIW002_0317B"  "AJG001C_0317B"
# if we want to save the flowset object now we can 
# this would be read back in with flowset 
# 

Harmonize data to remove batch or technical variation

This requires us to look and see where there are two peaks to align. We need to visualize the peaks of the transformed data before aligning.



# we can decided what level of processing to choose with the argument 'processing'
# biexp only applies a biexponential transformation
# align applies biexp transform and then aligns peaks
# retro (default), transforms, aligns and then reverse transforms
flowset_biexp <- harmonize(flowset, processing = 'biexp')
# we can visualize the peaks to see where there are two peaks for alignment

# we need to enter the column index for which peaks to align, the alignment for one or two peaks is not the same. 
#plotdensity_flowset(flowset)
#plotdensity_flowset(flowset_biexp) # to see the peaks

flowset_align <- harmonize(flowset, processing = 'align', 
                           two_peaks = c(7:20),
                       one_peak = c(1:6,21), threshold = 0.01)
*** recursive gc invocation
*** recursive gc invocation
*** recursive gc invocation
*** recursive gc invocation
*** recursive gc invocation
*** recursive gc invocation
*** recursive gc invocation
*** recursive gc invocation
*** recursive gc invocation
*** recursive gc invocation

Adjusting the distance between landmarks
.........

Adjusting the distance between landmarks
.........
flowset_retro <- harmonize(flowset, processing = 'retro', 
                           two_peaks = c(7:20),
                       one_peak = c(1:6,21), threshold = 0.01)

Adjusting the distance between landmarks
.........

Adjusting the distance between landmarks
.........
### test again later without running library(flowCore)
df <- flowset_to_csv(flowset_retro)

Now we have made all the different processing of the fsc files. We can visualize the intensity in cell density plots to see the alignment

#plotdensity_flowset(flowset)

plotdensity_flowset(flowset_biexp)
Warning in melt(lapply(as.list(flowset@frames), function(x) { :
  The melt generic in data.table has been passed a list and will attempt to redirect to the relevant reshape2 method; please note that reshape2 is deprecated, and this redirection is now deprecated as well. To continue using melt methods from reshape2 while both libraries are attached, e.g. melt.list, you can prepend the namespace like reshape2::melt(lapply(as.list(flowset@frames), function(x) {    x = as.data.frame(x@exprs)})). In the next version, this warning will become an error.
No id variables; using all as measure variables
No id variables; using all as measure variables
No id variables; using all as measure variables
No id variables; using all as measure variables
No id variables; using all as measure variables
No id variables; using all as measure variables
No id variables; using all as measure variables
No id variables; using all as measure variables
No id variables; using all as measure variables
Warning in geom_density_ridges(alpha = 0.4, verbose = FALSE) :
  Ignoring unknown parameters: `verbose`
Picking joint bandwidth of 0.0779
Picking joint bandwidth of 0.0498
Picking joint bandwidth of 0.0278
Picking joint bandwidth of 0.136
Picking joint bandwidth of 0.11
Picking joint bandwidth of 0.0292
Picking joint bandwidth of 1.27
Picking joint bandwidth of 0.253
Picking joint bandwidth of 1.21
Picking joint bandwidth of 1.46
Picking joint bandwidth of 0.405
Picking joint bandwidth of 0.398
Picking joint bandwidth of 0.267
Picking joint bandwidth of 0.638
Picking joint bandwidth of 1.01
Picking joint bandwidth of 1.25
Picking joint bandwidth of 0.97
Picking joint bandwidth of 0.42
Picking joint bandwidth of 1.22
Picking joint bandwidth of 0.973
Picking joint bandwidth of 0.175

plotdensity_flowset(flowset_align)
Warning in melt(lapply(as.list(flowset@frames), function(x) { :
  The melt generic in data.table has been passed a list and will attempt to redirect to the relevant reshape2 method; please note that reshape2 is deprecated, and this redirection is now deprecated as well. To continue using melt methods from reshape2 while both libraries are attached, e.g. melt.list, you can prepend the namespace like reshape2::melt(lapply(as.list(flowset@frames), function(x) {    x = as.data.frame(x@exprs)})). In the next version, this warning will become an error.
No id variables; using all as measure variables
No id variables; using all as measure variables
No id variables; using all as measure variables
No id variables; using all as measure variables
No id variables; using all as measure variables
No id variables; using all as measure variables
No id variables; using all as measure variables
No id variables; using all as measure variables
No id variables; using all as measure variables
Warning in geom_density_ridges(alpha = 0.4, verbose = FALSE) :
  Ignoring unknown parameters: `verbose`
Picking joint bandwidth of 0.0779
Picking joint bandwidth of 0.0498
Picking joint bandwidth of 0.0278
Picking joint bandwidth of 0.136
Picking joint bandwidth of 0.11
Picking joint bandwidth of 0.0292
Picking joint bandwidth of 1.27
Picking joint bandwidth of 0.357
Picking joint bandwidth of 1.22
Picking joint bandwidth of 1.47
Picking joint bandwidth of 0.485
Picking joint bandwidth of 0.391
Picking joint bandwidth of 0.265
Picking joint bandwidth of 0.659
Picking joint bandwidth of 1.01
Picking joint bandwidth of 1.29
Picking joint bandwidth of 0.967
Picking joint bandwidth of 0.424
Picking joint bandwidth of 1.24
Picking joint bandwidth of 0.97
Picking joint bandwidth of 0.175

#plotdensity_flowset(flowset_retro)

# the function make_seu will take in the df of expression and Antibody/Marker list as a vector and create a seurat object. Values are scaled. Marker expression will be in the "RNA" slot. PCA is calculated using AB vector as the features 

# make sure to always keep the same antibody order or your labels will not be correct


# antibody features in order to appear on the plots
AB <- c("CD24","CD56","CD29","CD15","CD184","CD133","CD71","CD44","GLAST","AQP4","HepaCAM", "CD140a","O4")
seu <- make_seu(df, AB_vector = AB)
Centering and scaling data matrix

  |                                                              
  |                                                        |   0%
  |                                                              
  |========================================================| 100%
Warning in irlba(A = t(x = object), nv = npcs, ...) :
  You're computing too large a percentage of total singular values, use a standard svd instead.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
PC_ 1 
Positive:  CD44, CD184, CD15, CD24, CD56, CD133 
Negative:  CD29, CD140a, O4, CD71, AQP4, HepaCAM 
PC_ 2 
Positive:  CD15, CD56, GLAST, CD140a, AQP4, O4 
Negative:  CD29, CD44, CD184, CD133, CD24, HepaCAM 
PC_ 3 
Positive:  CD56, CD29, CD133, GLAST, AQP4, CD71 
Negative:  CD44, CD184, CD140a, O4, HepaCAM, CD15 
PC_ 4 
Positive:  CD56, CD24, CD29, CD15, CD140a, CD184 
Negative:  CD133, AQP4, HepaCAM, CD71, O4, GLAST 
PC_ 5 
Positive:  CD184, CD24, CD133, O4, CD140a, HepaCAM 
Negative:  CD44, CD71, CD56, CD15, AQP4, GLAST 

You can save the data frame and seurat object for later



# to save the df for later
write.csv(df, paste(output_path,"df1000.csv", sep = ""))

# save the seurat object
saveRDS(seu, paste(output_path, "seuratObject1000.csv", sep = ""))

Read in the csv of the flow files processed and the seurat object

df.input <- read.csv(paste(output_path, "df1000.csv", sep = ""))

seu <- readRDS(paste(output_path, "seuratObject1000.csv", sep = ""))

Test out clustering methods

  1. Flowsom - requires the data frame from above
  2. Phenograph - requires Seurat object from above
  3. Louvain via Seurat - requires Seurat object from above

To run intrinsic statistics we need the data frame for all clustering methods. 1. Silhouette score: -1 to 1.A value near -1 indicates a poor quality of the clusters a value near 1 indicates a good quality of the clusters. 2. Calinski-Harabasz index: higher values indicate better quality clusters. 3. Davies-Bouldin index: lower values indicate better clusters. The min value is 0.

Note that even with only 1000 cells these processes are slow and if you want to test larger data sets use base R and HPC.

Test Flowsom


library(clustree)

# the lowest flow_k to use is 3

flow.test <- explore_param(input = seu,
                          cluster_method = 'flowsom', 
                          df_input= df.input, 
                          flow_k = c(5,10,15,20),
                          pheno_lou_kn = NULL, 
                          lou_resolution = NULL, 
                          run.plot = TRUE, 
                          run.stats = TRUE, 
                          save_to = NULL)

Notice in the UMAPs and heatmaps a large amount of cells are all in one or two clusters and small amounts of cells going into small clusters. This isn’t good for us to label cell types.

# Look at the intrinsic statistics
flow.test[[1]]

The statistics indicate that the fewer the lowest K value has the best quality clusters.

Test Phenograph clustering


pheno.test <-  explore_param(seu, #for phenograph and louvain only
                          cluster_method = 'phenograph', #take 1 cluster method
                          df_input= df.input, #needed  if input "flowsom"
                          flow_k = NULL, #k for flowsom
                          pheno_lou_kn = c(150,300,500), #kn for phenograph or louvain
                          lou_resolution = NULL, #resolution for louvain
                          run.plot = TRUE, #print if run
                          run.stats = TRUE, #print and return if run
                          save_to = NULL)

## clustree in phenograph doesn't make sense but I've included it to see it anyway

# look at the intrinsic stats table
pheno.test[[1]]

The silhouette score and DBI are best for fewer kn = 500 but the CHI is best for kn = 300. The stats on contradicting.

Test Louvain clustering


# for best clustree visualization include resolution 0

lou.test <- explore_param(input = seu, #for phenograph and louvain only
                          cluster_method = "louvain", 
                          df_input = df.input, 
                          flow_k = NULL, 
                          pheno_lou_kn = c(60, 200), 
                          lou_resolution = c(0,0.25,0.5,0.8), 
                          run.plot = TRUE, 
                          run.stats = TRUE, 
                          save_to = NULL)
lou.test[[1]]

The statistic differ for best clustering. Overall the intrinsic statistics are not helpful for this data for choosing cluster conditions. We decided to use the heatmaps and UMAPS for clusters that look best for annotation. We want clusters that are distinct from eachother on the UMAP and have clear markers on the heatmap. We then used the RAND Index to determine the final cluster conditions.

Check cluster stability - best resolution/cluster number/k value by calculating RAND Index and STD of cluster number


RI <- clust_stability(input = seu,
                       resolutions = c(0.1,0.25,0.5,0.8,1),
                       kn = 60,
                       n = 5, #number of iterations
                       save_to = NULL)

# it is recommended to run n= 100, however I ran only 5 here because it is long to calculate
 
#Look at the RI results
plot_randindex(
    rdf = RI$list,
    cp = c("orange", "violet"),
    view = c(0, 1) #zoom in x axis, this does not changes scales, just the viewable sections
)

# The RAND index indicates if cells are put into the same cluster each time the clustering is repeated - 1 mean they are exactly the same. We ran 10 times so there are 9 RI for each resolution.  There are 10 counts of the number of clusters (one for each iteration). Cluster number too low will not account for the true differences in groups, cluster numbers too high are difficult to annotate.

After checking parameters run cluster function to make add the clustering information into the


seu <- get_clusters(seu, method = "louvain",
                         df_input = df.input,
                         k = 60,
                         resolution = 1,
                         plots = TRUE,
                         save_plots = FALSE)
Computing nearest neighbor graph
Computing SNN
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 9000
Number of edges: 862796

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.7641
Number of communities: 12
Elapsed time: 2 seconds
[1] "method is Louvain"
Warning: The default method for RunUMAP has changed from calling Python UMAP via reticulate to the R-native UWOT using the cosine metric
To use Python UMAP via reticulate, set umap.method to 'umap-learn' and metric to 'correlation'
This message will be shown once per session
00:17:46 UMAP embedding parameters a = 0.4502 b = 1.076
00:17:46 Read 9000 rows and found 12 numeric columns
00:17:46 Using Annoy for neighbor search, n_neighbors = 60
00:17:46 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:17:46 Writing NN index file to temp file /var/folders/k4/khtkczkd5tn732ftjpwgtr240000gn/T//RtmpZxwI5C/filea5818fc2e30
00:17:46 Searching Annoy index using 1 thread, search_k = 6000
00:17:51 Annoy recall = 100%
00:17:51 Commencing smooth kNN distance calibration using 1 thread with target n_neighbors = 60
00:17:52 Initializing from normalized Laplacian + noise (using irlba)
00:17:52 Commencing optimization for 500 epochs, with 756780 positive edges
Using method 'umap'
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:18:10 Optimization finished

# if save_plots is TRUE the feature plots will be save as 13 plots in one file. The UMAP with cluster numbers will also be saved.

Annotate clusters

  1. Visualization for manual annotation. - output by clustering function
  2. CAM (Correlation assignment model) - requires reference matrix
  3. RFM (Random Forest Model) - requires annotated matching flow dataset
  4. Seurat label transfer - requires annotated matching flow data in a seurat object

Visualize expression on UMAP and with heat maps


AB <- c("CD24","CD56","CD29","CD15","CD184","CD133","CD71","CD44","GLAST","AQP4","HepaCAM", "CD140a","O4")


# this will let us see one at at time
for (i in AB) {
  print(FeaturePlot(seu, features = i, min.cutoff = 'q1', max.cutoff = 'q97', label = TRUE))
}

NA
NA

Some more visualization of expression values


# summary heat map
# use function plotmean

length(unique(seu$RNA_snn_res.1))
[1] 12
# 12 
# if we want to plot by cluster we need a vector of from 0 to the n-1 clusters
cluster.num <- c(0:11)

plotmean(plot_type = 'heatmap',seu = seu, group = 'RNA_snn_res.1', markers = AB, 
                     var_names = cluster.num, slot = 'scale.data', xlab = "Cluster",
         ylab = "Antibody")

NA
NA
saveRDS(seu, paste(output_path, "Seurat_temp.RDS", sep = ""))

Predict cell annotations with CAM (Corralations assignment method)


reference_path <- "/Users/rhalenathomas/GITHUB/CelltypeR/Data/ReferenceMatrix9celltypesOrdered.csv"

reference_data <- read.csv(reference_path)

cor <- find_correlation(test = df.input, 
                             reference = reference_data, 
                             min_corr = 0.45, 
                             min_diff = 0.05)

# creates a dataframe with cor1 cor2 and predicted cell type label

Visualize the CAM results


plot_corr(cor)
Warning in melt(df) :
  The melt generic in data.table has been passed a data.frame and will attempt to redirect to the relevant reshape2 method; please note that reshape2 is deprecated, and this redirection is now deprecated as well. To continue using melt methods from reshape2 while both libraries are attached, e.g. melt.list, you can prepend the namespace like reshape2::melt(df). In the next version, this warning will become an error.
Using X, best.cell.type, second.cell.type, cell.label as id variables
Warning in melt(df.downsample) :
  The melt generic in data.table has been passed a data.frame and will attempt to redirect to the relevant reshape2 method; please note that reshape2 is deprecated, and this redirection is now deprecated as well. To continue using melt methods from reshape2 while both libraries are attached, e.g. melt.list, you can prepend the namespace like reshape2::melt(df.downsample). In the next version, this warning will become an error.
Using X, best.cell.type, second.cell.type, cell.label as id variables
Warning in melt(double.cells) :
  The melt generic in data.table has been passed a data.frame and will attempt to redirect to the relevant reshape2 method; please note that reshape2 is deprecated, and this redirection is now deprecated as well. To continue using melt methods from reshape2 while both libraries are attached, e.g. melt.list, you can prepend the namespace like reshape2::melt(double.cells). In the next version, this warning will become an error.
Using X, best.cell.type, second.cell.type, cell.label as id variables
[[1]]

[[2]]

[[3]]

[[4]]

[[5]]

[[6]]

[[7]]

Apply correlation predictions to clusters and output a vector for annotation functions



# add the correlation predictions to the meta data
seu <- AddMetaData(object=seu, metadata=cor$cell.label, col.name = 'cor.labels')
# see the labels added
unique(seu$cor.labels)
 [1] "unknown"               "Astrocyte"            
 [3] "RG"                    "Neuron"               
 [5] "OPC"                   "Astrocyte-RG"         
 [7] "NPC"                   "Endothelial"          
 [9] "StemCell"              "StemCell-Neuron"      
[11] "Oligo"                 "StemCell-Oligo"       
[13] "Oligo-NPC"             "Neuron-StemCell"      
[15] "NPC-Neuron"            "OPC-Neuron"           
[17] "Oligo-OPC"             "Neuron-NPC"           
[19] "NPC-StemCell"          "StemCell-OPC"         
[21] "Neuron-OPC"            "StemCell-NPC"         
[23] "RG-Astrocyte"          "OPC-StemCell"         
[25] "RG-Endothelial"        "Endothelial-RG"       
[27] "Astrocyte-Endothelial" "Endothelial-Astrocyte"
[29] "OPC-Oligo"             "StemCell-Endothelial" 
[31] "OPC-NPC"               "Oligo-StemCell"       
[33] "NPC-RG"               
seu.cluster = seu$RNA_snn_res.1
seu.labels = seu$cor.labels

# plot the cluster predictions
plot_lab_clust(seu, seu$RNA_snn_res.1, seu$cor.labels)

NA
NA
NA
NA

Run get annotations function to return a vector of annotation in the order of the clusters.


cor.ann <- get_annotation(seu, seu.cluster = seu$RNA_snn_res.1, 
                          seu.label = seu$cor.labels, top_n = 3, 
                          filter_out = c("Unknown","unknown","Mixed"), 
                          Label = "CAM")
[1] "filtering"
cor.ann
dim(cor.ann)
[1] 12  2
cor.ann <- cor.ann[1:12,]
dim(cor.ann)
[1] 12  2
unique(cor.ann$CAM)
[1] StemCell    Astrocyte   RG          Endothelial OPC        
33 Levels: Astrocyte Astrocyte-Endothelial ... unknown
length(cor.ann$CAM)
[1] 12

Use a trained Random Forest model to predict cell types. Training of the Random Forest model with an annotated data set is below.

seu <- AddMetaData(object=seu, metadata=rfm.pred$rfm.labels, col.name = 'rfm.labels')

# check that the data is added 
table(seu$rfm.labels)

          Unknown             Mixed         Neurons 1 
               10              6563              1068 
    Radial Glia 1        Epithelial      Astrocytes 1 
               78               700                43 
        Neurons 2      Astrocytes 2      Astrocytes 3 
                0                43                 1 
Astrocytes mature         Neurons 3               NPC 
               56               330                64 
    Radial Glia 2     Radial Glia 3       Endothelial 
                1                 0                43 
 Oligodendrocytes       Stem-like 1       Stem-like 2 
                0                 0                 0 
      Neural stem 
                0 

Get the annotation by cluster for the RFM

Plot RFM predictions



plot_lab_clust(seu, seu.cluster = seu$RNA_snn_res.1, seu.labels = seu$rfm.labels, filter_out = c("unknown","Unknown","Mixed"))

NA
NA

Predicting cell types with Seurat label transfer using anchors


# takes in a seurat object with the labels added 
# makes a dataframe with the count of predicted labels for each cluster
# input seurat object with the predicted labels in the meta data
# input the clusters meta data slot to be labels
# input the meta data slot with the labels (correlation, random forest, seurat predicted)

#need reference data object with labels
seu.r<- readRDS("/Users/rhalenathomas/Documents/Data/FlowCytometry/PhenoID/Analysis/PaperFigures/Seu9000annot.08072021.RDS")


# the output is a seurat object with the predicted annotations

seu <- seurat_predict(seu, seu.r, ref_id = 'subgroups', down.sample = 500, markers = AB)
Projecting cell embeddings
Finding neighborhoods
Finding anchors
    Found 17519 anchors
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Warning: Requested number is larger than the number of available items (13). Setting to 13.
Filtering anchors
    Retained 10364 anchors
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Predicting cell labels

# plot the seurat anchor predictions
# get the annotation table for the seurat anchor predictions 

plot_lab_clust(seu, seu$RNA_snn_res.1, seu$seu.pred)


# to not filter anything use c()
seu.ann <- get_annotation(seu, seu$RNA_snn_res.1,seu$seu.pred, 
               top_n = 3, filter_out = c(), Label = "Seurat")
[1] "not filtering"
seu.ann
NA
NA

Get a consensus of cluster annotations, Add the annotations to the seurat object


# make a list of data frames
# all the dataframes need to be as.factor
ann.list <- list(cor.ann,rfm.ann,seu.ann, man.ann)

# annotate the seurat object

seu <- cluster_annotate(seu, ann.list, 
                        annotation_name ="CellType", 
                        to_label = "RNA_snn_res.1")

DimPlot(seu, group.by = "CellType")

NA
NA

Just use the annotate functions


seu <- annotate(seu, annotations = man.ann$manual, to_label = "RNA_snn_res.0.8", annotation_name = "MyCellType")

DimPlot(seu, group.by = "MyCellType")
#save with the annotations
saveRDS(seu,"/Users/rhalenathomas/Documents/Data/FlowCytometry/PhenoID/Analysis/testingLibrary/seu9000Feb24.RDS")

Compare groups


seu <- readRDS("/Users/rhalenathomas/Documents/Data/FlowCytometry/PhenoID/Analysis/testingLibrary/seu9000Feb24.RDS")

Add the variables into the seurat object

Genotype <- c("3450","3450","3450","AIW002","AIW002","AIW002","AJG001C","AJG001C","AJG001C")
ExDate <- c("0306","0317","0317","0306","0317","0317","0306","0317","0317")
Batch <- c("B","B","A","B","B","A","B","B","A")
Age <- c("273","284","263","273","284","263","273","284","263")

# Genotype
Idents(seu) <- "Sample"
cluster.ids <- Genotype
# vector with the new names - you need this vector from me

names(cluster.ids) <- levels(seu)    # get the levels
seu <- RenameIdents(seu, cluster.ids) # rename  
seu$Genotype <- Idents(seu)   # add a new dataslot

# Experiment date
Idents(seu) <- "Sample"
cluster.ids <- ExDate
# vector with the new names - you need this vector from me

names(cluster.ids) <- levels(seu)    # get the levels
seu <- RenameIdents(seu, cluster.ids) # rename  
seu$ExDate <- Idents(seu)   # add a new dataslot

# Batch
Idents(seu) <- "Sample"
cluster.ids <- Batch
# vector with the new names - you need this vector from me

names(cluster.ids) <- levels(seu)    # get the levels
seu <- RenameIdents(seu, cluster.ids) # rename  
seu$Batch <- Idents(seu)   # add a new dataslot

# days in final differentiation media
Idents(seu) <- "Sample"
cluster.ids <- Age
# vector with the new names - you need this vector from me

names(cluster.ids) <- levels(seu)    # get the levels
seu <- RenameIdents(seu, cluster.ids) # rename  
seu$DaysinCulture <- Idents(seu)   # add a new dataslot

Plots some variables

# one plot
proportionplots(seu.q,seu.var = seu$Genotype, seu.lable = seu$CellType, groups = "Genotype")
# add colours
colours <- c("chocolate1","chocolate3","orange",
                   "lightsalmon", "pink","lightpink3",
                   "steelblue3","deepskyblue",
                   "plum3","purple",
                   "seagreen3","tomato4","burlywood3","grey90","brown",
             "royalblue3", "tan4","yellowgreen")

proportionplots(seu.q,seu.var = seu$Genotype, seu.lable = seu$CellType, groups = "Genotype", my_colours = colours)
var.list <- list(seu$DaysinCulture,seu$Batch,seu$ExDate,seu$Genotype)
varnames <- c("Days in Culture", "Batch", "Experiment Date", "Genotype")
# plot all the variables of interest at once

plotproportions(seu, var.list = var.list, xgroup = seu$CellType, varnames = varnames, my_colours = c("blue","red"))

Heatmaps


# make sure the order is correct
celltypes <- c("unknown","radial glia 1", "astrocytes 1", "mixed","neurons 1",
               "neurons 2", "epithelial", "astrocytes mature", "npc", "radial glia 2",
               "radial glia 3", "endothelial","neurons 3", "astrocytes 2",
               "oligodendrocytes", "stem-like 1","neural stem")

plotmean(plot_type = 'heatmap',seu = seu, group = 'CellType', markers = AB, 
                     var_names = celltypes, slot = 'scale.data', xlab = "Cell Type",
         ylab = "Antibody")
# dot plot

og.order <- c("unknown","radial glia 1", "astrocytes 1", "mixed","neurons 1",
               "neurons 2", "epithelial", "astrocytes mature", "npc", "radial glia 2",
               "radial glia 3", "endothelial","neurons 3", "astrocytes 2",
               "oligodendrocytes", "stem-like 1","neural stem")

# make sure the terms are exactly the same and you don't miss any
new.order <- c("astrocytes 1","astrocytes 2","astrocytes mature",
               "endothelial","epithelial", "mixed","neurons 1",
               "neurons 2","neurons 3","neural stem","npc",
               "oligodendrocytes",
               "radial glia 1","radial glia 2","radial glia 3","stem-like 1",
               "unknown")
new.order <- rev(new.order)

AB.order <- c("CD24","CD56","CD29","CD15","CD184","CD133","CD71","CD44","GLAST","AQP4","HepaCAM", "CD140a","O4")

plotmean(plot_type = 'dotplot',seu = seu, group = 'CellType', markers = AB, 
                     var_names = celltypes, slot = 'scale.data', xlab = "Cell Type",
         ylab = "Antibody", var1order = new.order, var2order = AB.order)

Statistics comparing groups


# prepare a dataframe for stats
# this function takes the annotated seurat object with all the variables already existing as metadata slots

# check what meta data slots exist in your object
colnames(seu@meta.data)
# run the function

var.names <- c("Sample","DaysinCulture", "Batch", "ExDate", "Genotype", "CellType")

df.for.stats <- Prep_for_stats(seu, marker_list = AB, variables = var.names, 
                               marker_name = 'Marker')


# save the csv for later
write.csv(df.for.stats, "/Users/rhalenathomas/Documents/Data/FlowCytometry/PhenoID/Analysis/testingLibrary/df4statsFeb26.csv")

head(df.for.stats)

First we have 3 variables: Experimental variable, Cell types, Markers We want to compare the mean expression per group: For all antibodies together in each cell type between a given variable (Genotype) (One way anova) We want to compare each antibody separately for a given variable for each cell type (two way anova)


df.means <- df.for.stats %>% group_by(Sample, CellType, Marker) %>%
  summarize(mean_value = mean(value), .groups = )

head(df.means)
dim(df.means)

#%>% left_join(df.for.stats, by = c("Sample","CellType","Marker")) 

df_means <- df.for.stats %>%
  group_by(Sample, CellType, Marker) %>%
  mutate(mean_value = mean(value)) %>%
  distinct(Sample, CellType, Marker, mean_value, .keep_all = TRUE) %>% select(-value)


get_means <- function(df, group_cols, value_col) {
  df_means <- df %>%
    group_by(across(all_of(group_cols))) %>%
    mutate(mean_value = mean(value)) %>%
    distinct(across(all_of(group_cols)), mean_value, .keep_all = TRUE) %>%
    select(-value)
  return(df_means)
}

df_means <- get_means(df.for.stats, group_cols = c("Sample","CellType","Marker"), value_col = "value")


head(df_means)
dim(df_means)

Train Random Forest model Requires a labelled seurat object More cells will give higher accuracy but increase computation time. Run in HPC with lots of cells


rf <- RFM_train(seurate_object = seu, 
                             AB_list = AB, annotations = seu$CellType3,
                      split = c(0.8,0.2),
                      downsample = 20000,
                      seed = 222,
                      mytry = c(1:10),
                      maxnodes = c(12: 25),
                      trees = c(250, 500, 1000,2000),
                      start_node = 15)

save(rf, output_path,"trainedRFMFeb14.Rds")
LS0tCnRpdGxlOiAiQ2VsbHR5cGVSIHdvcmtmbG93IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgoxLiBEYXRhIHByZXByb2Nlc3NpbmcKYS4gUmVhZCBGbG93Sm8gZmlsZXMgaW50byBSLgpiLiBDcmVhdGUgYSBkYXRhIGZyYW1lIHdpdGggaW50ZW5zaXR5IG1lYXN1cmVtZW50cyBmb3IgZWFjaCBtYXJrZXIgZm9yIGFsbCAgICAgICAgICBzYW1wbGVzIHdpdGhpbiB0aGUgZXhwZXJpbWVudCB0byBiZSBhbmFseXplZC4gIApjLiBIYXJtb25pemUgZGF0YSAKZC4gQ3JlYXRlIGRhdGFmcmFtZQplLiBDcmVhdGUgYSBTZXVyYXQgb2JqZWN0CgoyLiBDbHVzdGVyIGRhdGEKYS4gRXhwbG9yZSBjbHVzdGVyaW5nIG1ldGhvZHMgYW5kIHBhcmFtZXRlcnMuCmIuIERldGVybWluZSBjbHVzdGVyIHN0YWJpbGl0eQpjLiBDcmVhdGUgY2x1c3RlcnMgd2l0aCBiZXN0IGNvbmRpdGlvbnMKCjMuIEFubm90YXRlIGNsdXN0ZXJzIHdpdGggY2VsbCB0eXBlcy4KYS4gUHJlZGljdCBjZWxsIHR5cGVzIGJ5IGNvcnJlbGF0aW9uIG1hdHJpeApiLiBWaXN1YWxpemUgZXhwcmVzc2lvbiBieSBjbHVzdGVyIGZvciBtYW51YWwgYW5ub3RhdGlvbgpjLiBXaXRoIGFubm90YXRlZCBhbiBkYXRhIHNldCB0cmFpbiBSYW5kb20gRm9yZXN0IGNsYXNzaWZpZXIgdG8gcHJlZGljdCBjZWxsICAgICAgICB0eXBlcy4KZC4gV2l0aCBhbm5vdGF0ZWQgYW4gZGF0YSBzZXQgcHJlZGljdCBjZWxsIHR5cGVzIHdpdGggU2V1cmF0IGxhYmVsIHRyYW5zZmVyLgplLiBGb3IgZWFjaCBwcmVkaWN0aW9uIGNhbGN1bGF0ZSB0aGUgdG9wIG1vc3QgcHJlZGljdGVkIGNlbGwgcGVyIGNsdXN0ZXIgYW5kICAgICAgICB0YWtlIGEgY29uc2Vuc3VzIHRvIGFubm90YXRlIGNsdXN0ZXJzLgpmLiBBZGQgY2x1c3RlciBhbm5vdGF0aW9ucy4KCgoKYGBge3J9CiMgbG9hZCBuZWNlc3NhcnkgbGlicmFyaWVzIApsaWJyYXJ5KFNldXJhdCkKbGlicmFyeShkcGx5cikgCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShDZWxsdHlwZVIpCgpgYGAKCgojIFByZXByb2Nlc3NpbmcKClJlYWQgaW4gdGhlIGZsb3cgZGF0YQpUaGlzIGRhdGEgc2hvdWxkIGJlIHRoZSBnYXRlZCBsaXZlIGNlbGxzLiAgCkFsbCBzYW1wbGVzIG5lZWQgdG8gYmUgaW4gb25lIGZvbGRlci4KCgpgYGB7cn0KCmlucHV0X3BhdGggPC0gIi9Vc2Vycy9yaGFsZW5hdGhvbWFzL0RvY3VtZW50cy9EYXRhL0Zsb3dDeXRvbWV0cnkvUGhlbm9JRC9GbG93RGF0YUZpbGVzLzlNQk8iCm91dHB1dF9wYXRoIDwtICIvVXNlcnMvcmhhbGVuYXRob21hcy9Eb2N1bWVudHMvRGF0YS9GbG93Q3l0b21ldHJ5L1BoZW5vSUQvQW5hbHlzaXMvdGVzdGluZ0xpYnJhcnkvIgoKIyAxLmEgUmVhZCBpbiBGbG93Sm8gRmlsZXMgCgojIEluIEZpZ3VyZSAzIGRvd25zYW1wbGUgdG8gOTAwMCB3aGVyZSBwb3NzaWJsZQojIEhlcmUgZG93bnNhbXBsZSB0byAxMDAwIHRvIHNwZWVkIHVwIGNvbXB1dGF0aW9uCmZsb3dzZXQgPC0gZnNjX3RvX2ZzKGlucHV0X3BhdGgsIGRvd25zYW1wbGUgPSAxMDAwKQojIGRvd24gc2FtcGxlIGNhbiBiZSBhIG51bWJlciwgJ25vbmUnIG9yICdtaW4nCgojIGxvb2sgYXQgZmlsZSBuYW1lcyBhbmQgcmVuYW1lIHdpdGggc2hvcnRlciBzYW1wbGUgbmFtZXMKCnNhbXBsZU5hbWVzKGZsb3dzZXQpCnNhbXBsZU5hbWVzKGZsb3dzZXQpIDwtIHNhbXBsZU5hbWVzKGZsb3dzZXQpIDwtIGMoIjM0NTBfMDMwNiIsIkFJVzAwMl8wMzA2IiwiQUpHMDAxQ18wMzA2IiwiMzQ1MF8wMzE3QSIsIkFJVzAwMl8wMzE3QSIsIkFKRzAwMUNfMDMxN0EiLCIzNDUwXzAzMTdCIiwiQUlXMDAyXzAzMTdCIiwiQUpHMDAxQ18wMzE3QiIpCnNhbXBsZU5hbWVzKGZsb3dzZXQpCgoKIyBpZiB3ZSB3YW50IHRvIHNhdmUgdGhlIGZsb3dzZXQgb2JqZWN0IG5vdyB3ZSBjYW4gCiMgdGhpcyB3b3VsZCBiZSByZWFkIGJhY2sgaW4gd2l0aCBmbG93c2V0IAojIAoKCgpgYGAKCkhhcm1vbml6ZSBkYXRhIHRvIHJlbW92ZSBiYXRjaCBvciB0ZWNobmljYWwgdmFyaWF0aW9uCgpUaGlzIHJlcXVpcmVzIHVzIHRvIGxvb2sgYW5kIHNlZSB3aGVyZSB0aGVyZSBhcmUgdHdvIHBlYWtzIHRvIGFsaWduLiBXZSBuZWVkIHRvIHZpc3VhbGl6ZSB0aGUgcGVha3Mgb2YgdGhlIHRyYW5zZm9ybWVkIGRhdGEgYmVmb3JlIGFsaWduaW5nLgoKYGBge3J9CgoKIyB3ZSBjYW4gZGVjaWRlZCB3aGF0IGxldmVsIG9mIHByb2Nlc3NpbmcgdG8gY2hvb3NlIHdpdGggdGhlIGFyZ3VtZW50ICdwcm9jZXNzaW5nJwojIGJpZXhwIG9ubHkgYXBwbGllcyBhIGJpZXhwb25lbnRpYWwgdHJhbnNmb3JtYXRpb24KIyBhbGlnbiBhcHBsaWVzIGJpZXhwIHRyYW5zZm9ybSBhbmQgdGhlbiBhbGlnbnMgcGVha3MKIyByZXRybyAoZGVmYXVsdCksIHRyYW5zZm9ybXMsIGFsaWducyBhbmQgdGhlbiByZXZlcnNlIHRyYW5zZm9ybXMKZmxvd3NldF9iaWV4cCA8LSBoYXJtb25pemUoZmxvd3NldCwgcHJvY2Vzc2luZyA9ICdiaWV4cCcpCiMgd2UgY2FuIHZpc3VhbGl6ZSB0aGUgcGVha3MgdG8gc2VlIHdoZXJlIHRoZXJlIGFyZSB0d28gcGVha3MgZm9yIGFsaWdubWVudAoKIyB3ZSBuZWVkIHRvIGVudGVyIHRoZSBjb2x1bW4gaW5kZXggZm9yIHdoaWNoIHBlYWtzIHRvIGFsaWduLCB0aGUgYWxpZ25tZW50IGZvciBvbmUgb3IgdHdvIHBlYWtzIGlzIG5vdCB0aGUgc2FtZS4gCiNwbG90ZGVuc2l0eV9mbG93c2V0KGZsb3dzZXQpCiNwbG90ZGVuc2l0eV9mbG93c2V0KGZsb3dzZXRfYmlleHApICMgdG8gc2VlIHRoZSBwZWFrcwoKZmxvd3NldF9hbGlnbiA8LSBoYXJtb25pemUoZmxvd3NldCwgcHJvY2Vzc2luZyA9ICdhbGlnbicsIAogICAgICAgICAgICAgICAgICAgICAgICAgICB0d29fcGVha3MgPSBjKDc6MjApLAogICAgICAgICAgICAgICAgICAgICAgIG9uZV9wZWFrID0gYygxOjYsMjEpLCB0aHJlc2hvbGQgPSAwLjAxKQoKZmxvd3NldF9yZXRybyA8LSBoYXJtb25pemUoZmxvd3NldCwgcHJvY2Vzc2luZyA9ICdyZXRybycsIAogICAgICAgICAgICAgICAgICAgICAgICAgICB0d29fcGVha3MgPSBjKDc6MjApLAogICAgICAgICAgICAgICAgICAgICAgIG9uZV9wZWFrID0gYygxOjYsMjEpLCB0aHJlc2hvbGQgPSAwLjAxKQojIyMgdGVzdCBhZ2FpbiBsYXRlciB3aXRob3V0IHJ1bm5pbmcgbGlicmFyeShmbG93Q29yZSkKZGYgPC0gZmxvd3NldF90b19jc3YoZmxvd3NldF9yZXRybykKCgoKCmBgYAoKTm93IHdlIGhhdmUgbWFkZSBhbGwgdGhlIGRpZmZlcmVudCBwcm9jZXNzaW5nIG9mIHRoZSBmc2MgZmlsZXMuICBXZSBjYW4gdmlzdWFsaXplIHRoZSBpbnRlbnNpdHkgaW4gY2VsbCBkZW5zaXR5IHBsb3RzIHRvIHNlZSB0aGUgYWxpZ25tZW50CgpgYGB7cn0KI3Bsb3RkZW5zaXR5X2Zsb3dzZXQoZmxvd3NldCkKCnBsb3RkZW5zaXR5X2Zsb3dzZXQoZmxvd3NldF9iaWV4cCkKcGxvdGRlbnNpdHlfZmxvd3NldChmbG93c2V0X2FsaWduKQojcGxvdGRlbnNpdHlfZmxvd3NldChmbG93c2V0X3JldHJvKQoKCmBgYAoKCgoKYGBge3J9CgojIHRoZSBmdW5jdGlvbiBtYWtlX3NldSB3aWxsIHRha2UgaW4gdGhlIGRmIG9mIGV4cHJlc3Npb24gYW5kIEFudGlib2R5L01hcmtlciBsaXN0IGFzIGEgdmVjdG9yIGFuZCBjcmVhdGUgYSBzZXVyYXQgb2JqZWN0LiBWYWx1ZXMgYXJlIHNjYWxlZC4gTWFya2VyIGV4cHJlc3Npb24gd2lsbCBiZSBpbiB0aGUgIlJOQSIgc2xvdC4gUENBIGlzIGNhbGN1bGF0ZWQgdXNpbmcgQUIgdmVjdG9yIGFzIHRoZSBmZWF0dXJlcyAKCiMgbWFrZSBzdXJlIHRvIGFsd2F5cyBrZWVwIHRoZSBzYW1lIGFudGlib2R5IG9yZGVyIG9yIHlvdXIgbGFiZWxzIHdpbGwgbm90IGJlIGNvcnJlY3QKCgojIGFudGlib2R5IGZlYXR1cmVzIGluIG9yZGVyIHRvIGFwcGVhciBvbiB0aGUgcGxvdHMKQUIgPC0gYygiQ0QyNCIsIkNENTYiLCJDRDI5IiwiQ0QxNSIsIkNEMTg0IiwiQ0QxMzMiLCJDRDcxIiwiQ0Q0NCIsIkdMQVNUIiwiQVFQNCIsIkhlcGFDQU0iLCAiQ0QxNDBhIiwiTzQiKQpzZXUgPC0gbWFrZV9zZXUoZGYsIEFCX3ZlY3RvciA9IEFCKQoKCmBgYApZb3UgY2FuIHNhdmUgdGhlIGRhdGEgZnJhbWUgYW5kIHNldXJhdCBvYmplY3QgZm9yIGxhdGVyCgpgYGB7cn0KCgojIHRvIHNhdmUgdGhlIGRmIGZvciBsYXRlcgp3cml0ZS5jc3YoZGYsIHBhc3RlKG91dHB1dF9wYXRoLCJkZjEwMDAuY3N2Iiwgc2VwID0gIiIpKQoKIyBzYXZlIHRoZSBzZXVyYXQgb2JqZWN0CnNhdmVSRFMoc2V1LCBwYXN0ZShvdXRwdXRfcGF0aCwgInNldXJhdE9iamVjdDEwMDAuY3N2Iiwgc2VwID0gIiIpKQoKCgpgYGAKCgpSZWFkIGluIHRoZSBjc3Ygb2YgdGhlIGZsb3cgZmlsZXMgcHJvY2Vzc2VkIGFuZCB0aGUgc2V1cmF0IG9iamVjdAoKYGBge3J9CmRmLmlucHV0IDwtIHJlYWQuY3N2KHBhc3RlKG91dHB1dF9wYXRoLCAiZGYxMDAwLmNzdiIsIHNlcCA9ICIiKSkKCnNldSA8LSByZWFkUkRTKHBhc3RlKG91dHB1dF9wYXRoLCAic2V1cmF0T2JqZWN0MTAwMC5jc3YiLCBzZXAgPSAiIikpCgpgYGAKCiMgVGVzdCBvdXQgY2x1c3RlcmluZyBtZXRob2RzCjEuIEZsb3dzb20gLSByZXF1aXJlcyB0aGUgZGF0YSBmcmFtZSBmcm9tIGFib3ZlCjIuIFBoZW5vZ3JhcGggLSByZXF1aXJlcyBTZXVyYXQgb2JqZWN0IGZyb20gYWJvdmUKMy4gTG91dmFpbiB2aWEgU2V1cmF0IC0gcmVxdWlyZXMgU2V1cmF0IG9iamVjdCBmcm9tIGFib3ZlCgpUbyBydW4gaW50cmluc2ljIHN0YXRpc3RpY3Mgd2UgbmVlZCB0aGUgZGF0YSBmcmFtZSBmb3IgYWxsIGNsdXN0ZXJpbmcgbWV0aG9kcy4gCjEuIFNpbGhvdWV0dGUgc2NvcmU6IC0xIHRvIDEuQSB2YWx1ZSBuZWFyIC0xIGluZGljYXRlcyBhIHBvb3IgcXVhbGl0eSBvZiB0aGUgY2x1c3RlcnMgYSB2YWx1ZSBuZWFyIDEgaW5kaWNhdGVzIGEgZ29vZCBxdWFsaXR5IG9mIHRoZSBjbHVzdGVycy4KMi4gQ2FsaW5za2ktSGFyYWJhc3ogaW5kZXg6IGhpZ2hlciB2YWx1ZXMgaW5kaWNhdGUgYmV0dGVyIHF1YWxpdHkgY2x1c3RlcnMuCjMuIERhdmllcy1Cb3VsZGluIGluZGV4OiBsb3dlciB2YWx1ZXMgaW5kaWNhdGUgYmV0dGVyIGNsdXN0ZXJzLiAgVGhlIG1pbiB2YWx1ZSBpcyAwLiAKCk5vdGUgdGhhdCBldmVuIHdpdGggb25seSAxMDAwIGNlbGxzIHRoZXNlIHByb2Nlc3NlcyBhcmUgc2xvdyBhbmQgaWYgeW91IHdhbnQgdG8gdGVzdCBsYXJnZXIgZGF0YSBzZXRzIHVzZSBiYXNlIFIgYW5kIEhQQy4gCgoKVGVzdCBGbG93c29tCgpgYGB7cn0KCmxpYnJhcnkoY2x1c3RyZWUpCgojIHRoZSBsb3dlc3QgZmxvd19rIHRvIHVzZSBpcyAzCgpmbG93LnRlc3QgPC0gZXhwbG9yZV9wYXJhbShpbnB1dCA9IHNldSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyX21ldGhvZCA9ICdmbG93c29tJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGZfaW5wdXQ9IGRmLmlucHV0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICBmbG93X2sgPSBjKDUsMTAsMTUsMjApLAogICAgICAgICAgICAgICAgICAgICAgICAgIHBoZW5vX2xvdV9rbiA9IE5VTEwsIAogICAgICAgICAgICAgICAgICAgICAgICAgIGxvdV9yZXNvbHV0aW9uID0gTlVMTCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuLnBsb3QgPSBUUlVFLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBydW4uc3RhdHMgPSBUUlVFLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlX3RvID0gTlVMTCkKCmBgYApOb3RpY2UgaW4gdGhlIFVNQVBzIGFuZCBoZWF0bWFwcyBhIGxhcmdlIGFtb3VudCBvZiBjZWxscyBhcmUgYWxsIGluIG9uZSBvciB0d28gY2x1c3RlcnMgYW5kIHNtYWxsIGFtb3VudHMgb2YgY2VsbHMgZ29pbmcgaW50byBzbWFsbCBjbHVzdGVycy4gIFRoaXMgaXNuJ3QgZ29vZCBmb3IgdXMgdG8gbGFiZWwgY2VsbCB0eXBlcy4gCgpgYGB7cn0KIyBMb29rIGF0IHRoZSBpbnRyaW5zaWMgc3RhdGlzdGljcwpmbG93LnRlc3RbWzFdXQoKYGBgCgpUaGUgc3RhdGlzdGljcyBpbmRpY2F0ZSB0aGF0IHRoZSBmZXdlciB0aGUgbG93ZXN0IEsgdmFsdWUgaGFzIHRoZSBiZXN0IHF1YWxpdHkgY2x1c3RlcnMuIAoKCgpUZXN0IFBoZW5vZ3JhcGggY2x1c3RlcmluZwoKYGBge3J9CgpwaGVuby50ZXN0IDwtICBleHBsb3JlX3BhcmFtKHNldSwgI2ZvciBwaGVub2dyYXBoIGFuZCBsb3V2YWluIG9ubHkKICAgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyX21ldGhvZCA9ICdwaGVub2dyYXBoJywgI3Rha2UgMSBjbHVzdGVyIG1ldGhvZAogICAgICAgICAgICAgICAgICAgICAgICAgIGRmX2lucHV0PSBkZi5pbnB1dCwgI25lZWRlZCAgaWYgaW5wdXQgImZsb3dzb20iCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvd19rID0gTlVMTCwgI2sgZm9yIGZsb3dzb20KICAgICAgICAgICAgICAgICAgICAgICAgICBwaGVub19sb3Vfa24gPSBjKDE1MCwzMDAsNTAwKSwgI2tuIGZvciBwaGVub2dyYXBoIG9yIGxvdXZhaW4KICAgICAgICAgICAgICAgICAgICAgICAgICBsb3VfcmVzb2x1dGlvbiA9IE5VTEwsICNyZXNvbHV0aW9uIGZvciBsb3V2YWluCiAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuLnBsb3QgPSBUUlVFLCAjcHJpbnQgaWYgcnVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuLnN0YXRzID0gVFJVRSwgI3ByaW50IGFuZCByZXR1cm4gaWYgcnVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZV90byA9IE5VTEwpCgojIyBjbHVzdHJlZSBpbiBwaGVub2dyYXBoIGRvZXNuJ3QgbWFrZSBzZW5zZSBidXQgSSd2ZSBpbmNsdWRlZCBpdCB0byBzZWUgaXQgYW55d2F5CgoKCmBgYAoKCmBgYHtyfQoKIyBsb29rIGF0IHRoZSBpbnRyaW5zaWMgc3RhdHMgdGFibGUKcGhlbm8udGVzdFtbMV1dCgoKYGBgClRoZSBzaWxob3VldHRlIHNjb3JlIGFuZCBEQkkgYXJlIGJlc3QgZm9yIGZld2VyIGtuID0gNTAwIGJ1dCB0aGUgQ0hJIGlzIGJlc3QgZm9yIGtuID0gMzAwLiBUaGUgc3RhdHMgb24gY29udHJhZGljdGluZy4KCgoKVGVzdCBMb3V2YWluIGNsdXN0ZXJpbmcKCmBgYHtyfQoKIyBmb3IgYmVzdCBjbHVzdHJlZSB2aXN1YWxpemF0aW9uIGluY2x1ZGUgcmVzb2x1dGlvbiAwCgpsb3UudGVzdCA8LSBleHBsb3JlX3BhcmFtKGlucHV0ID0gc2V1LCAjZm9yIHBoZW5vZ3JhcGggYW5kIGxvdXZhaW4gb25seQogICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJfbWV0aG9kID0gImxvdXZhaW4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBkZl9pbnB1dCA9IGRmLmlucHV0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICBmbG93X2sgPSBOVUxMLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBwaGVub19sb3Vfa24gPSBjKDYwLCAyMDApLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBsb3VfcmVzb2x1dGlvbiA9IGMoMCwwLjI1LDAuNSwwLjgpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBydW4ucGxvdCA9IFRSVUUsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bi5zdGF0cyA9IFRSVUUsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVfdG8gPSBOVUxMKQoKCgpgYGAKCmBgYHtyfQpsb3UudGVzdFtbMV1dCgpgYGAKVGhlIHN0YXRpc3RpYyBkaWZmZXIgZm9yIGJlc3QgY2x1c3RlcmluZy4gCk92ZXJhbGwgdGhlIGludHJpbnNpYyBzdGF0aXN0aWNzIGFyZSBub3QgaGVscGZ1bCBmb3IgdGhpcyBkYXRhIGZvciBjaG9vc2luZyBjbHVzdGVyIGNvbmRpdGlvbnMuICBXZSBkZWNpZGVkIHRvIHVzZSB0aGUgaGVhdG1hcHMgYW5kIFVNQVBTIGZvciBjbHVzdGVycyB0aGF0IGxvb2sgYmVzdCBmb3IgYW5ub3RhdGlvbi4gV2Ugd2FudCBjbHVzdGVycyB0aGF0IGFyZSBkaXN0aW5jdCBmcm9tIGVhY2hvdGhlciBvbiB0aGUgVU1BUCBhbmQgaGF2ZSBjbGVhciBtYXJrZXJzIG9uIHRoZSBoZWF0bWFwLiBXZSB0aGVuIHVzZWQgdGhlIFJBTkQgSW5kZXggdG8gZGV0ZXJtaW5lIHRoZSBmaW5hbCBjbHVzdGVyIGNvbmRpdGlvbnMuIAoKCkNoZWNrIGNsdXN0ZXIgc3RhYmlsaXR5IC0gYmVzdCByZXNvbHV0aW9uL2NsdXN0ZXIgbnVtYmVyL2sgdmFsdWUgYnkgY2FsY3VsYXRpbmcgUkFORCBJbmRleCBhbmQgU1REIG9mIGNsdXN0ZXIgbnVtYmVyCgpgYGB7cn0KClJJIDwtIGNsdXN0X3N0YWJpbGl0eShpbnB1dCA9IHNldSwKICAgICAgICAgICAgICAgICAgICAgICByZXNvbHV0aW9ucyA9IGMoMC4xLDAuMjUsMC41LDAuOCwxKSwKICAgICAgICAgICAgICAgICAgICAgICBrbiA9IDYwLAogICAgICAgICAgICAgICAgICAgICAgIG4gPSA1LCAjbnVtYmVyIG9mIGl0ZXJhdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICBzYXZlX3RvID0gTlVMTCkKCiMgaXQgaXMgcmVjb21tZW5kZWQgdG8gcnVuIG49IDEwMCwgaG93ZXZlciBJIHJhbiBvbmx5IDUgaGVyZSBiZWNhdXNlIGl0IGlzIGxvbmcgdG8gY2FsY3VsYXRlCgoKYGBgCgpgYGB7cn0KIAojTG9vayBhdCB0aGUgUkkgcmVzdWx0cwpwbG90X3JhbmRpbmRleCgKICAgIHJkZiA9IFJJJGxpc3QsCiAgICBjcCA9IGMoIm9yYW5nZSIsICJ2aW9sZXQiKSwKICAgIHZpZXcgPSBjKDAsIDEpICN6b29tIGluIHggYXhpcywgdGhpcyBkb2VzIG5vdCBjaGFuZ2VzIHNjYWxlcywganVzdCB0aGUgdmlld2FibGUgc2VjdGlvbnMKKQoKIyBUaGUgUkFORCBpbmRleCBpbmRpY2F0ZXMgaWYgY2VsbHMgYXJlIHB1dCBpbnRvIHRoZSBzYW1lIGNsdXN0ZXIgZWFjaCB0aW1lIHRoZSBjbHVzdGVyaW5nIGlzIHJlcGVhdGVkIC0gMSBtZWFuIHRoZXkgYXJlIGV4YWN0bHkgdGhlIHNhbWUuIFdlIHJhbiAxMCB0aW1lcyBzbyB0aGVyZSBhcmUgOSBSSSBmb3IgZWFjaCByZXNvbHV0aW9uLiAgVGhlcmUgYXJlIDEwIGNvdW50cyBvZiB0aGUgbnVtYmVyIG9mIGNsdXN0ZXJzIChvbmUgZm9yIGVhY2ggaXRlcmF0aW9uKS4gQ2x1c3RlciBudW1iZXIgdG9vIGxvdyB3aWxsIG5vdCBhY2NvdW50IGZvciB0aGUgdHJ1ZSBkaWZmZXJlbmNlcyBpbiBncm91cHMsIGNsdXN0ZXIgbnVtYmVycyB0b28gaGlnaCBhcmUgZGlmZmljdWx0IHRvIGFubm90YXRlLgoKCmBgYAoKCkFmdGVyIGNoZWNraW5nIHBhcmFtZXRlcnMgcnVuIGNsdXN0ZXIgZnVuY3Rpb24gdG8gbWFrZSBhZGQgdGhlIGNsdXN0ZXJpbmcgaW5mb3JtYXRpb24gaW50byB0aGUgCgpgYGB7cn0KCnNldSA8LSBnZXRfY2x1c3RlcnMoc2V1LCBtZXRob2QgPSAibG91dmFpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBkZl9pbnB1dCA9IGRmLmlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgayA9IDYwLAogICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbiA9IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBwbG90cyA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlX3Bsb3RzID0gRkFMU0UpCiMgaWYgc2F2ZV9wbG90cyBpcyBUUlVFIHRoZSBmZWF0dXJlIHBsb3RzIHdpbGwgYmUgc2F2ZSBhcyAxMyBwbG90cyBpbiBvbmUgZmlsZS4gVGhlIFVNQVAgd2l0aCBjbHVzdGVyIG51bWJlcnMgd2lsbCBhbHNvIGJlIHNhdmVkLgoKYGBgCgoKIyBBbm5vdGF0ZSBjbHVzdGVycwoxLiBWaXN1YWxpemF0aW9uIGZvciBtYW51YWwgYW5ub3RhdGlvbi4gLSBvdXRwdXQgYnkgY2x1c3RlcmluZyBmdW5jdGlvbgoyLiBDQU0gKENvcnJlbGF0aW9uIGFzc2lnbm1lbnQgbW9kZWwpIC0gcmVxdWlyZXMgcmVmZXJlbmNlIG1hdHJpeAozLiBSRk0gKFJhbmRvbSBGb3Jlc3QgTW9kZWwpIC0gcmVxdWlyZXMgYW5ub3RhdGVkIG1hdGNoaW5nIGZsb3cgZGF0YXNldAo0LiBTZXVyYXQgbGFiZWwgdHJhbnNmZXIgLSByZXF1aXJlcyBhbm5vdGF0ZWQgbWF0Y2hpbmcgZmxvdyBkYXRhIGluIGEgc2V1cmF0IG9iamVjdAoKVmlzdWFsaXplIGV4cHJlc3Npb24gb24gVU1BUCBhbmQgd2l0aCBoZWF0IG1hcHMKCmBgYHtyfQoKQUIgPC0gYygiQ0QyNCIsIkNENTYiLCJDRDI5IiwiQ0QxNSIsIkNEMTg0IiwiQ0QxMzMiLCJDRDcxIiwiQ0Q0NCIsIkdMQVNUIiwiQVFQNCIsIkhlcGFDQU0iLCAiQ0QxNDBhIiwiTzQiKQoKCiMgdGhpcyB3aWxsIGxldCB1cyBzZWUgb25lIGF0IGF0IHRpbWUKZm9yIChpIGluIEFCKSB7CiAgcHJpbnQoRmVhdHVyZVBsb3Qoc2V1LCBmZWF0dXJlcyA9IGksIG1pbi5jdXRvZmYgPSAncTEnLCBtYXguY3V0b2ZmID0gJ3E5NycsIGxhYmVsID0gVFJVRSkpCn0KCgpgYGAKClNvbWUgbW9yZSB2aXN1YWxpemF0aW9uIG9mIGV4cHJlc3Npb24gdmFsdWVzCgpgYGB7cn0KCiMgc3VtbWFyeSBoZWF0IG1hcAojIHVzZSBmdW5jdGlvbiBwbG90bWVhbgoKbGVuZ3RoKHVuaXF1ZShzZXUkUk5BX3Nubl9yZXMuMSkpCiMgMTIgCiMgaWYgd2Ugd2FudCB0byBwbG90IGJ5IGNsdXN0ZXIgd2UgbmVlZCBhIHZlY3RvciBvZiBmcm9tIDAgdG8gdGhlIG4tMSBjbHVzdGVycwpjbHVzdGVyLm51bSA8LSBjKDA6MTEpCgpwbG90bWVhbihwbG90X3R5cGUgPSAnaGVhdG1hcCcsc2V1ID0gc2V1LCBncm91cCA9ICdSTkFfc25uX3Jlcy4xJywgbWFya2VycyA9IEFCLCAKICAgICAgICAgICAgICAgICAgICAgdmFyX25hbWVzID0gY2x1c3Rlci5udW0sIHNsb3QgPSAnc2NhbGUuZGF0YScsIHhsYWIgPSAiQ2x1c3RlciIsCiAgICAgICAgIHlsYWIgPSAiQW50aWJvZHkiKQoKCmBgYAoKYGBge3J9CiMgcHJlZGljdCBjZWxsIHR5cGUgZnJvbSBsb29raW5nIGF0IGV4cHJlc3Npb24gcGF0dGVybnMKbXlhbm4gPC0gYygidW5rbm93biIsImdsaWEiLAogICAgICAgICAgICJyYWRpYWwgZ2xpYSIsIm5ldXJvbnMxIiwgInJhZGlhbCBnbGlhIiwKICAgICAgICAgICAiYXN0cm9jeXRlcyIsInJhZGlhbCBnbGlhIiwKICAgICAgICAgICAiYXN0cm9jeXRlcyIsIm5ldXJvbnMyIiwKICAgICAgICAgICAiTlBDIiwiZW5kb3RoZWxpYWwiLAogICAgICAgICAgICJhc3Ryb2N5dGVzIikKCm1hbi5hbm4gPC0gZGF0YS5mcmFtZShDbHVzdGVyID0gYygwOjExKSwgTXlBbm4gPSBteWFubikKbWFuLmFubgoKbWFuLmFubiRDbHVzdGVyIDwtIGFzLmZhY3RvcihtYW4uYW5uJENsdXN0ZXIpCm1hbi5hbm4kTXlBbm4gPC0gYXMuZmFjdG9yKG1hbi5hbm4kTXlBbm4pCm1hbi5hbm4KCmBgYAoKYGBge3J9CnNhdmVSRFMoc2V1LCBwYXN0ZShvdXRwdXRfcGF0aCwgIlNldXJhdF90ZW1wLlJEUyIsIHNlcCA9ICIiKSkKCmBgYAoKCgpQcmVkaWN0IGNlbGwgYW5ub3RhdGlvbnMgd2l0aCBDQU0gKENvcnJhbGF0aW9ucyBhc3NpZ25tZW50IG1ldGhvZCkKCmBgYHtyfQoKcmVmZXJlbmNlX3BhdGggPC0gIi9Vc2Vycy9yaGFsZW5hdGhvbWFzL0dJVEhVQi9DZWxsdHlwZVIvRGF0YS9SZWZlcmVuY2VNYXRyaXg5Y2VsbHR5cGVzT3JkZXJlZC5jc3YiCgpyZWZlcmVuY2VfZGF0YSA8LSByZWFkLmNzdihyZWZlcmVuY2VfcGF0aCkKCmNvciA8LSBmaW5kX2NvcnJlbGF0aW9uKHRlc3QgPSBkZi5pbnB1dCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlX2RhdGEsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbl9jb3JyID0gMC40NSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluX2RpZmYgPSAwLjA1KQoKIyBjcmVhdGVzIGEgZGF0YWZyYW1lIHdpdGggY29yMSBjb3IyIGFuZCBwcmVkaWN0ZWQgY2VsbCB0eXBlIGxhYmVsCgoKCmBgYAoKVmlzdWFsaXplIHRoZSBDQU0gcmVzdWx0cwoKYGBge3J9CgpwbG90X2NvcnIoY29yKQoKCmBgYAoKQXBwbHkgY29ycmVsYXRpb24gcHJlZGljdGlvbnMgdG8gY2x1c3RlcnMgYW5kIG91dHB1dCBhIHZlY3RvciBmb3IgYW5ub3RhdGlvbiBmdW5jdGlvbnMKCmBgYHtyfQoKCiMgYWRkIHRoZSBjb3JyZWxhdGlvbiBwcmVkaWN0aW9ucyB0byB0aGUgbWV0YSBkYXRhCnNldSA8LSBBZGRNZXRhRGF0YShvYmplY3Q9c2V1LCBtZXRhZGF0YT1jb3IkY2VsbC5sYWJlbCwgY29sLm5hbWUgPSAnY29yLmxhYmVscycpCiMgc2VlIHRoZSBsYWJlbHMgYWRkZWQKdW5pcXVlKHNldSRjb3IubGFiZWxzKQoKc2V1LmNsdXN0ZXIgPSBzZXUkUk5BX3Nubl9yZXMuMQpzZXUubGFiZWxzID0gc2V1JGNvci5sYWJlbHMKCiMgcGxvdCB0aGUgY2x1c3RlciBwcmVkaWN0aW9ucwpwbG90X2xhYl9jbHVzdChzZXUsIHNldSRSTkFfc25uX3Jlcy4xLCBzZXUkY29yLmxhYmVscykKCgoKCmBgYAoKUnVuIGdldCBhbm5vdGF0aW9ucyBmdW5jdGlvbiB0byByZXR1cm4gYSB2ZWN0b3Igb2YgYW5ub3RhdGlvbiBpbiB0aGUgb3JkZXIgb2YgdGhlIGNsdXN0ZXJzLgoKYGBge3J9Cgpjb3IuYW5uIDwtIGdldF9hbm5vdGF0aW9uKHNldSwgc2V1LmNsdXN0ZXIgPSBzZXUkUk5BX3Nubl9yZXMuMSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V1LmxhYmVsID0gc2V1JGNvci5sYWJlbHMsIHRvcF9uID0gMywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyX291dCA9IGMoIlVua25vd24iLCJ1bmtub3duIiwiTWl4ZWQiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgPSAiQ0FNIikKY29yLmFubgpkaW0oY29yLmFubikKCmNvci5hbm4gPC0gY29yLmFublsxOjEyLF0KZGltKGNvci5hbm4pCgp1bmlxdWUoY29yLmFubiRDQU0pCmxlbmd0aChjb3IuYW5uJENBTSkKCmBgYAoKCgoKClVzZSBhIHRyYWluZWQgUmFuZG9tIEZvcmVzdCBtb2RlbCB0byBwcmVkaWN0IGNlbGwgdHlwZXMuIApUcmFpbmluZyBvZiB0aGUgUmFuZG9tIEZvcmVzdCBtb2RlbCB3aXRoIGFuIGFubm90YXRlZCBkYXRhIHNldCBpcyBiZWxvdy4KCmBgYHtyfQoKIyB5b3UgbXVzdCBoYXZlIGEgc2F2ZWQgdHJhaW5lZCBtb2RlbCBmcm9tIGEgZGF0YSBvYmplY3QgYW5ub3RhdGVkIGZyb20gdGhlIHNhbWUgbWFya2VycwojIHNlZSB0aGUgZW5kIG9mIHRoZSB3b3JrYm9vayBmb3IgaG93IHRvIHRyYWluIHRoZSBtb2RlbAoKcmYgPC0gcmVhZFJEUygiL1VzZXJzL3JoYWxlbmF0aG9tYXMvRG9jdW1lbnRzL0RhdGEvRmxvd0N5dG9tZXRyeS9QaGVub0lEL0FuYWx5c2lzL1BhcGVyRmlndXJlcy9SRk1fdHJhaW5lZC4xMTA3MjAyMi5SZHMiKQoKQUIgPC0gYygiQ0QyNCIsIkNENTYiLCJDRDI5IiwiQ0QxNSIsIkNEMTg0IiwiQ0QxMzMiLCJDRDcxIiwiQ0Q0NCIsIkdMQVNUIiwiQVFQNCIsIkhlcGFDQU0iLCAiQ0QxNDBhIiwiTzQiKQoKcmZtLnByZWQgPC0gUkZNX3ByZWRpY3Qoc2V1LCByZikKaGVhZChyZm0ucHJlZCkKCiMgYWRkIHRoZSBwcmVkaWN0aW9ucyBpbnRvIHRoZSBzZXVyYXQgb2JqZWN0CgpzZXUgPC0gQWRkTWV0YURhdGEob2JqZWN0PXNldSwgbWV0YWRhdGE9cmZtLnByZWQkcmZtLmxhYmVscywgY29sLm5hbWUgPSAncmZtLmxhYmVscycpCgojIGNoZWNrIHRoYXQgdGhlIGRhdGEgaXMgYWRkZWQgCnRhYmxlKHNldSRyZm0ubGFiZWxzKQoKCmBgYAoKR2V0IHRoZSBhbm5vdGF0aW9uIGJ5IGNsdXN0ZXIgZm9yIHRoZSBSRk0KCmBgYHtyfQoKcmZtLmFubiA8LSBnZXRfYW5ub3RhdGlvbihzZXUsIHNldSRSTkFfc25uX3Jlcy4xLHNldSRyZm0ubGFiZWxzLCAKICAgICAgICAgICAgICAgdG9wX24gPSAzLCBmaWx0ZXJfb3V0ID0gYygidW5rbm93biIsIlVua25vd24iLCJNaXhlZCIsIk1peCIpLCBMYWJlbCA9ICJSRk0iKQpyZm0uYW5uCgojcmZtLmFubiA8LSBnZXRfYW5ub3RhdGlvbihzZXUsIHNldSRSTkFfc25uX3Jlcy4wLjgsc2V1JHJmbS5sYWJlbHMsIAogIyAgICAgICAgICAgICAgdG9wX24gPSAzLCBmaWx0ZXJfb3V0ID0gRkFMU0UsIExhYmVsID0gIlJGTSIpCnJmbS5hbm4KZGltKHJmbS5hbm4pCgoKYGBgCgpQbG90IFJGTSBwcmVkaWN0aW9ucwoKYGBge3J9CgoKcGxvdF9sYWJfY2x1c3Qoc2V1LCBzZXUuY2x1c3RlciA9IHNldSRSTkFfc25uX3Jlcy4xLCBzZXUubGFiZWxzID0gc2V1JHJmbS5sYWJlbHMsIGZpbHRlcl9vdXQgPSBjKCJ1bmtub3duIiwiVW5rbm93biIsIk1peGVkIikpCgoKYGBgCgoKClByZWRpY3RpbmcgY2VsbCB0eXBlcyB3aXRoIFNldXJhdCBsYWJlbCB0cmFuc2ZlciB1c2luZyBhbmNob3JzCgoKYGBge3J9CgojIHRha2VzIGluIGEgc2V1cmF0IG9iamVjdCB3aXRoIHRoZSBsYWJlbHMgYWRkZWQgCiMgbWFrZXMgYSBkYXRhZnJhbWUgd2l0aCB0aGUgY291bnQgb2YgcHJlZGljdGVkIGxhYmVscyBmb3IgZWFjaCBjbHVzdGVyCiMgaW5wdXQgc2V1cmF0IG9iamVjdCB3aXRoIHRoZSBwcmVkaWN0ZWQgbGFiZWxzIGluIHRoZSBtZXRhIGRhdGEKIyBpbnB1dCB0aGUgY2x1c3RlcnMgbWV0YSBkYXRhIHNsb3QgdG8gYmUgbGFiZWxzCiMgaW5wdXQgdGhlIG1ldGEgZGF0YSBzbG90IHdpdGggdGhlIGxhYmVscyAoY29ycmVsYXRpb24sIHJhbmRvbSBmb3Jlc3QsIHNldXJhdCBwcmVkaWN0ZWQpCgojbmVlZCByZWZlcmVuY2UgZGF0YSBvYmplY3Qgd2l0aCBsYWJlbHMKc2V1LnI8LSByZWFkUkRTKCIvVXNlcnMvcmhhbGVuYXRob21hcy9Eb2N1bWVudHMvRGF0YS9GbG93Q3l0b21ldHJ5L1BoZW5vSUQvQW5hbHlzaXMvUGFwZXJGaWd1cmVzL1NldTkwMDBhbm5vdC4wODA3MjAyMS5SRFMiKQoKCiMgdGhlIG91dHB1dCBpcyBhIHNldXJhdCBvYmplY3Qgd2l0aCB0aGUgcHJlZGljdGVkIGFubm90YXRpb25zCgpzZXUgPC0gc2V1cmF0X3ByZWRpY3Qoc2V1LCBzZXUuciwgcmVmX2lkID0gJ3N1Ymdyb3VwcycsIGRvd24uc2FtcGxlID0gNTAwLCBtYXJrZXJzID0gQUIpCgoKCgpgYGAKCmBgYHtyfQoKIyBwbG90IHRoZSBzZXVyYXQgYW5jaG9yIHByZWRpY3Rpb25zCiMgZ2V0IHRoZSBhbm5vdGF0aW9uIHRhYmxlIGZvciB0aGUgc2V1cmF0IGFuY2hvciBwcmVkaWN0aW9ucyAKCnBsb3RfbGFiX2NsdXN0KHNldSwgc2V1JFJOQV9zbm5fcmVzLjEsIHNldSRzZXUucHJlZCkKCiMgdG8gbm90IGZpbHRlciBhbnl0aGluZyB1c2UgYygpCnNldS5hbm4gPC0gZ2V0X2Fubm90YXRpb24oc2V1LCBzZXUkUk5BX3Nubl9yZXMuMSxzZXUkc2V1LnByZWQsIAogICAgICAgICAgICAgICB0b3BfbiA9IDMsIGZpbHRlcl9vdXQgPSBjKCksIExhYmVsID0gIlNldXJhdCIpCnNldS5hbm4KCgpgYGAKCkdldCBhIGNvbnNlbnN1cyBvZiBjbHVzdGVyIGFubm90YXRpb25zLCBBZGQgdGhlIGFubm90YXRpb25zIHRvIHRoZSBzZXVyYXQgb2JqZWN0CgoKCmBgYHtyfQoKIyBtYWtlIGEgbGlzdCBvZiBkYXRhIGZyYW1lcwojIGFsbCB0aGUgZGF0YWZyYW1lcyBuZWVkIHRvIGJlIGFzLmZhY3Rvcgphbm4ubGlzdCA8LSBsaXN0KGNvci5hbm4scmZtLmFubixzZXUuYW5uLCBtYW4uYW5uKQoKIyBhbm5vdGF0ZSB0aGUgc2V1cmF0IG9iamVjdAoKc2V1IDwtIGNsdXN0ZXJfYW5ub3RhdGUoc2V1LCBhbm4ubGlzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25fbmFtZSA9IkNlbGxUeXBlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgIHRvX2xhYmVsID0gIlJOQV9zbm5fcmVzLjEiKQoKRGltUGxvdChzZXUsIGdyb3VwLmJ5ID0gIkNlbGxUeXBlIikKCgpgYGAKCkp1c3QgdXNlIHRoZSBhbm5vdGF0ZSBmdW5jdGlvbnMKCmBgYHtyfQoKc2V1IDwtIGFubm90YXRlKHNldSwgYW5ub3RhdGlvbnMgPSBtYW4uYW5uJG1hbnVhbCwgdG9fbGFiZWwgPSAiUk5BX3Nubl9yZXMuMC44IiwgYW5ub3RhdGlvbl9uYW1lID0gIk15Q2VsbFR5cGUiKQoKRGltUGxvdChzZXUsIGdyb3VwLmJ5ID0gIk15Q2VsbFR5cGUiKQoKYGBgCgoKCgoKYGBge3J9CiNzYXZlIHdpdGggdGhlIGFubm90YXRpb25zCnNhdmVSRFMoc2V1LCIvVXNlcnMvcmhhbGVuYXRob21hcy9Eb2N1bWVudHMvRGF0YS9GbG93Q3l0b21ldHJ5L1BoZW5vSUQvQW5hbHlzaXMvdGVzdGluZ0xpYnJhcnkvc2V1OTAwMEZlYjI0LlJEUyIpCgoKYGBgCgoKQ29tcGFyZSBncm91cHMKCgpgYGB7cn0KCnNldSA8LSByZWFkUkRTKCIvVXNlcnMvcmhhbGVuYXRob21hcy9Eb2N1bWVudHMvRGF0YS9GbG93Q3l0b21ldHJ5L1BoZW5vSUQvQW5hbHlzaXMvdGVzdGluZ0xpYnJhcnkvc2V1OTAwMEZlYjI0LlJEUyIpCgoKYGBgCgoKQWRkIHRoZSB2YXJpYWJsZXMgaW50byB0aGUgc2V1cmF0IG9iamVjdApgYGB7cn0KR2Vub3R5cGUgPC0gYygiMzQ1MCIsIjM0NTAiLCIzNDUwIiwiQUlXMDAyIiwiQUlXMDAyIiwiQUlXMDAyIiwiQUpHMDAxQyIsIkFKRzAwMUMiLCJBSkcwMDFDIikKRXhEYXRlIDwtIGMoIjAzMDYiLCIwMzE3IiwiMDMxNyIsIjAzMDYiLCIwMzE3IiwiMDMxNyIsIjAzMDYiLCIwMzE3IiwiMDMxNyIpCkJhdGNoIDwtIGMoIkIiLCJCIiwiQSIsIkIiLCJCIiwiQSIsIkIiLCJCIiwiQSIpCkFnZSA8LSBjKCIyNzMiLCIyODQiLCIyNjMiLCIyNzMiLCIyODQiLCIyNjMiLCIyNzMiLCIyODQiLCIyNjMiKQoKIyBHZW5vdHlwZQpJZGVudHMoc2V1KSA8LSAiU2FtcGxlIgpjbHVzdGVyLmlkcyA8LSBHZW5vdHlwZQojIHZlY3RvciB3aXRoIHRoZSBuZXcgbmFtZXMgLSB5b3UgbmVlZCB0aGlzIHZlY3RvciBmcm9tIG1lCgpuYW1lcyhjbHVzdGVyLmlkcykgPC0gbGV2ZWxzKHNldSkgICAgIyBnZXQgdGhlIGxldmVscwpzZXUgPC0gUmVuYW1lSWRlbnRzKHNldSwgY2x1c3Rlci5pZHMpICMgcmVuYW1lICAKc2V1JEdlbm90eXBlIDwtIElkZW50cyhzZXUpICAgIyBhZGQgYSBuZXcgZGF0YXNsb3QKCiMgRXhwZXJpbWVudCBkYXRlCklkZW50cyhzZXUpIDwtICJTYW1wbGUiCmNsdXN0ZXIuaWRzIDwtIEV4RGF0ZQojIHZlY3RvciB3aXRoIHRoZSBuZXcgbmFtZXMgLSB5b3UgbmVlZCB0aGlzIHZlY3RvciBmcm9tIG1lCgpuYW1lcyhjbHVzdGVyLmlkcykgPC0gbGV2ZWxzKHNldSkgICAgIyBnZXQgdGhlIGxldmVscwpzZXUgPC0gUmVuYW1lSWRlbnRzKHNldSwgY2x1c3Rlci5pZHMpICMgcmVuYW1lICAKc2V1JEV4RGF0ZSA8LSBJZGVudHMoc2V1KSAgICMgYWRkIGEgbmV3IGRhdGFzbG90CgojIEJhdGNoCklkZW50cyhzZXUpIDwtICJTYW1wbGUiCmNsdXN0ZXIuaWRzIDwtIEJhdGNoCiMgdmVjdG9yIHdpdGggdGhlIG5ldyBuYW1lcyAtIHlvdSBuZWVkIHRoaXMgdmVjdG9yIGZyb20gbWUKCm5hbWVzKGNsdXN0ZXIuaWRzKSA8LSBsZXZlbHMoc2V1KSAgICAjIGdldCB0aGUgbGV2ZWxzCnNldSA8LSBSZW5hbWVJZGVudHMoc2V1LCBjbHVzdGVyLmlkcykgIyByZW5hbWUgIApzZXUkQmF0Y2ggPC0gSWRlbnRzKHNldSkgICAjIGFkZCBhIG5ldyBkYXRhc2xvdAoKIyBkYXlzIGluIGZpbmFsIGRpZmZlcmVudGlhdGlvbiBtZWRpYQpJZGVudHMoc2V1KSA8LSAiU2FtcGxlIgpjbHVzdGVyLmlkcyA8LSBBZ2UKIyB2ZWN0b3Igd2l0aCB0aGUgbmV3IG5hbWVzIC0geW91IG5lZWQgdGhpcyB2ZWN0b3IgZnJvbSBtZQoKbmFtZXMoY2x1c3Rlci5pZHMpIDwtIGxldmVscyhzZXUpICAgICMgZ2V0IHRoZSBsZXZlbHMKc2V1IDwtIFJlbmFtZUlkZW50cyhzZXUsIGNsdXN0ZXIuaWRzKSAjIHJlbmFtZSAgCnNldSREYXlzaW5DdWx0dXJlIDwtIElkZW50cyhzZXUpICAgIyBhZGQgYSBuZXcgZGF0YXNsb3QKCgoKYGBgCgpQbG90cyBzb21lIHZhcmlhYmxlcwoKYGBge3J9CiMgb25lIHBsb3QKcHJvcG9ydGlvbnBsb3RzKHNldS5xLHNldS52YXIgPSBzZXUkR2Vub3R5cGUsIHNldS5sYWJsZSA9IHNldSRDZWxsVHlwZSwgZ3JvdXBzID0gIkdlbm90eXBlIikKIyBhZGQgY29sb3Vycwpjb2xvdXJzIDwtIGMoImNob2NvbGF0ZTEiLCJjaG9jb2xhdGUzIiwib3JhbmdlIiwKICAgICAgICAgICAgICAgICAgICJsaWdodHNhbG1vbiIsICJwaW5rIiwibGlnaHRwaW5rMyIsCiAgICAgICAgICAgICAgICAgICAic3RlZWxibHVlMyIsImRlZXBza3libHVlIiwKICAgICAgICAgICAgICAgICAgICJwbHVtMyIsInB1cnBsZSIsCiAgICAgICAgICAgICAgICAgICAic2VhZ3JlZW4zIiwidG9tYXRvNCIsImJ1cmx5d29vZDMiLCJncmV5OTAiLCJicm93biIsCiAgICAgICAgICAgICAicm95YWxibHVlMyIsICJ0YW40IiwieWVsbG93Z3JlZW4iKQoKcHJvcG9ydGlvbnBsb3RzKHNldS5xLHNldS52YXIgPSBzZXUkR2Vub3R5cGUsIHNldS5sYWJsZSA9IHNldSRDZWxsVHlwZSwgZ3JvdXBzID0gIkdlbm90eXBlIiwgbXlfY29sb3VycyA9IGNvbG91cnMpCgpgYGAKCmBgYHtyfQp2YXIubGlzdCA8LSBsaXN0KHNldSREYXlzaW5DdWx0dXJlLHNldSRCYXRjaCxzZXUkRXhEYXRlLHNldSRHZW5vdHlwZSkKdmFybmFtZXMgPC0gYygiRGF5cyBpbiBDdWx0dXJlIiwgIkJhdGNoIiwgIkV4cGVyaW1lbnQgRGF0ZSIsICJHZW5vdHlwZSIpCiMgcGxvdCBhbGwgdGhlIHZhcmlhYmxlcyBvZiBpbnRlcmVzdCBhdCBvbmNlCgpwbG90cHJvcG9ydGlvbnMoc2V1LCB2YXIubGlzdCA9IHZhci5saXN0LCB4Z3JvdXAgPSBzZXUkQ2VsbFR5cGUsIHZhcm5hbWVzID0gdmFybmFtZXMsIG15X2NvbG91cnMgPSBjKCJibHVlIiwicmVkIikpCgoKCgpgYGAKCgpIZWF0bWFwcwoKYGBge3J9CgojIG1ha2Ugc3VyZSB0aGUgb3JkZXIgaXMgY29ycmVjdApjZWxsdHlwZXMgPC0gYygidW5rbm93biIsInJhZGlhbCBnbGlhIDEiLCAiYXN0cm9jeXRlcyAxIiwgIm1peGVkIiwibmV1cm9ucyAxIiwKICAgICAgICAgICAgICAgIm5ldXJvbnMgMiIsICJlcGl0aGVsaWFsIiwgImFzdHJvY3l0ZXMgbWF0dXJlIiwgIm5wYyIsICJyYWRpYWwgZ2xpYSAyIiwKICAgICAgICAgICAgICAgInJhZGlhbCBnbGlhIDMiLCAiZW5kb3RoZWxpYWwiLCJuZXVyb25zIDMiLCAiYXN0cm9jeXRlcyAyIiwKICAgICAgICAgICAgICAgIm9saWdvZGVuZHJvY3l0ZXMiLCAic3RlbS1saWtlIDEiLCJuZXVyYWwgc3RlbSIpCgpwbG90bWVhbihwbG90X3R5cGUgPSAnaGVhdG1hcCcsc2V1ID0gc2V1LCBncm91cCA9ICdDZWxsVHlwZScsIG1hcmtlcnMgPSBBQiwgCiAgICAgICAgICAgICAgICAgICAgIHZhcl9uYW1lcyA9IGNlbGx0eXBlcywgc2xvdCA9ICdzY2FsZS5kYXRhJywgeGxhYiA9ICJDZWxsIFR5cGUiLAogICAgICAgICB5bGFiID0gIkFudGlib2R5IikKCgpgYGAKYGBge3J9CiMgZG90IHBsb3QKCm9nLm9yZGVyIDwtIGMoInVua25vd24iLCJyYWRpYWwgZ2xpYSAxIiwgImFzdHJvY3l0ZXMgMSIsICJtaXhlZCIsIm5ldXJvbnMgMSIsCiAgICAgICAgICAgICAgICJuZXVyb25zIDIiLCAiZXBpdGhlbGlhbCIsICJhc3Ryb2N5dGVzIG1hdHVyZSIsICJucGMiLCAicmFkaWFsIGdsaWEgMiIsCiAgICAgICAgICAgICAgICJyYWRpYWwgZ2xpYSAzIiwgImVuZG90aGVsaWFsIiwibmV1cm9ucyAzIiwgImFzdHJvY3l0ZXMgMiIsCiAgICAgICAgICAgICAgICJvbGlnb2RlbmRyb2N5dGVzIiwgInN0ZW0tbGlrZSAxIiwibmV1cmFsIHN0ZW0iKQoKIyBtYWtlIHN1cmUgdGhlIHRlcm1zIGFyZSBleGFjdGx5IHRoZSBzYW1lIGFuZCB5b3UgZG9uJ3QgbWlzcyBhbnkKbmV3Lm9yZGVyIDwtIGMoImFzdHJvY3l0ZXMgMSIsImFzdHJvY3l0ZXMgMiIsImFzdHJvY3l0ZXMgbWF0dXJlIiwKICAgICAgICAgICAgICAgImVuZG90aGVsaWFsIiwiZXBpdGhlbGlhbCIsICJtaXhlZCIsIm5ldXJvbnMgMSIsCiAgICAgICAgICAgICAgICJuZXVyb25zIDIiLCJuZXVyb25zIDMiLCJuZXVyYWwgc3RlbSIsIm5wYyIsCiAgICAgICAgICAgICAgICJvbGlnb2RlbmRyb2N5dGVzIiwKICAgICAgICAgICAgICAgInJhZGlhbCBnbGlhIDEiLCJyYWRpYWwgZ2xpYSAyIiwicmFkaWFsIGdsaWEgMyIsInN0ZW0tbGlrZSAxIiwKICAgICAgICAgICAgICAgInVua25vd24iKQpuZXcub3JkZXIgPC0gcmV2KG5ldy5vcmRlcikKCkFCLm9yZGVyIDwtIGMoIkNEMjQiLCJDRDU2IiwiQ0QyOSIsIkNEMTUiLCJDRDE4NCIsIkNEMTMzIiwiQ0Q3MSIsIkNENDQiLCJHTEFTVCIsIkFRUDQiLCJIZXBhQ0FNIiwgIkNEMTQwYSIsIk80IikKCnBsb3RtZWFuKHBsb3RfdHlwZSA9ICdkb3RwbG90JyxzZXUgPSBzZXUsIGdyb3VwID0gJ0NlbGxUeXBlJywgbWFya2VycyA9IEFCLCAKICAgICAgICAgICAgICAgICAgICAgdmFyX25hbWVzID0gY2VsbHR5cGVzLCBzbG90ID0gJ3NjYWxlLmRhdGEnLCB4bGFiID0gIkNlbGwgVHlwZSIsCiAgICAgICAgIHlsYWIgPSAiQW50aWJvZHkiLCB2YXIxb3JkZXIgPSBuZXcub3JkZXIsIHZhcjJvcmRlciA9IEFCLm9yZGVyKQoKCmBgYAoKU3RhdGlzdGljcyBjb21wYXJpbmcgZ3JvdXBzCgoKYGBge3J9CgojIHByZXBhcmUgYSBkYXRhZnJhbWUgZm9yIHN0YXRzCiMgdGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgYW5ub3RhdGVkIHNldXJhdCBvYmplY3Qgd2l0aCBhbGwgdGhlIHZhcmlhYmxlcyBhbHJlYWR5IGV4aXN0aW5nIGFzIG1ldGFkYXRhIHNsb3RzCgojIGNoZWNrIHdoYXQgbWV0YSBkYXRhIHNsb3RzIGV4aXN0IGluIHlvdXIgb2JqZWN0CmNvbG5hbWVzKHNldUBtZXRhLmRhdGEpCgoKCmBgYAoKCmBgYHtyfQojIHJ1biB0aGUgZnVuY3Rpb24KCnZhci5uYW1lcyA8LSBjKCJTYW1wbGUiLCJEYXlzaW5DdWx0dXJlIiwgIkJhdGNoIiwgIkV4RGF0ZSIsICJHZW5vdHlwZSIsICJDZWxsVHlwZSIpCgpkZi5mb3Iuc3RhdHMgPC0gUHJlcF9mb3Jfc3RhdHMoc2V1LCBtYXJrZXJfbGlzdCA9IEFCLCB2YXJpYWJsZXMgPSB2YXIubmFtZXMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyX25hbWUgPSAnTWFya2VyJykKCgojIHNhdmUgdGhlIGNzdiBmb3IgbGF0ZXIKd3JpdGUuY3N2KGRmLmZvci5zdGF0cywgIi9Vc2Vycy9yaGFsZW5hdGhvbWFzL0RvY3VtZW50cy9EYXRhL0Zsb3dDeXRvbWV0cnkvUGhlbm9JRC9BbmFseXNpcy90ZXN0aW5nTGlicmFyeS9kZjRzdGF0c0ZlYjI2LmNzdiIpCgpoZWFkKGRmLmZvci5zdGF0cykKCgpgYGAKCgpGaXJzdCB3ZSBoYXZlIDMgdmFyaWFibGVzOiBFeHBlcmltZW50YWwgdmFyaWFibGUsIENlbGwgdHlwZXMsIE1hcmtlcnMKV2Ugd2FudCB0byBjb21wYXJlIHRoZSBtZWFuIGV4cHJlc3Npb24gcGVyIGdyb3VwOgpGb3IgYWxsIGFudGlib2RpZXMgdG9nZXRoZXIgaW4gZWFjaCBjZWxsIHR5cGUgYmV0d2VlbiBhIGdpdmVuIHZhcmlhYmxlIChHZW5vdHlwZSkgKE9uZSB3YXkgYW5vdmEpCldlIHdhbnQgdG8gY29tcGFyZSBlYWNoIGFudGlib2R5IHNlcGFyYXRlbHkgZm9yIGEgZ2l2ZW4gdmFyaWFibGUgZm9yIGVhY2ggY2VsbCB0eXBlICh0d28gd2F5IGFub3ZhKQoKYGBge3J9CgpkZi5tZWFucyA8LSBkZi5mb3Iuc3RhdHMgJT4lIGdyb3VwX2J5KFNhbXBsZSwgQ2VsbFR5cGUsIE1hcmtlcikgJT4lCiAgc3VtbWFyaXplKG1lYW5fdmFsdWUgPSBtZWFuKHZhbHVlKSwgLmdyb3VwcyA9ICkKCmhlYWQoZGYubWVhbnMpCmRpbShkZi5tZWFucykKCiMlPiUgbGVmdF9qb2luKGRmLmZvci5zdGF0cywgYnkgPSBjKCJTYW1wbGUiLCJDZWxsVHlwZSIsIk1hcmtlciIpKSAKCmRmX21lYW5zIDwtIGRmLmZvci5zdGF0cyAlPiUKICBncm91cF9ieShTYW1wbGUsIENlbGxUeXBlLCBNYXJrZXIpICU+JQogIG11dGF0ZShtZWFuX3ZhbHVlID0gbWVhbih2YWx1ZSkpICU+JQogIGRpc3RpbmN0KFNhbXBsZSwgQ2VsbFR5cGUsIE1hcmtlciwgbWVhbl92YWx1ZSwgLmtlZXBfYWxsID0gVFJVRSkgJT4lIHNlbGVjdCgtdmFsdWUpCgoKZ2V0X21lYW5zIDwtIGZ1bmN0aW9uKGRmLCBncm91cF9jb2xzLCB2YWx1ZV9jb2wpIHsKICBkZl9tZWFucyA8LSBkZiAlPiUKICAgIGdyb3VwX2J5KGFjcm9zcyhhbGxfb2YoZ3JvdXBfY29scykpKSAlPiUKICAgIG11dGF0ZShtZWFuX3ZhbHVlID0gbWVhbih2YWx1ZSkpICU+JQogICAgZGlzdGluY3QoYWNyb3NzKGFsbF9vZihncm91cF9jb2xzKSksIG1lYW5fdmFsdWUsIC5rZWVwX2FsbCA9IFRSVUUpICU+JQogICAgc2VsZWN0KC12YWx1ZSkKICByZXR1cm4oZGZfbWVhbnMpCn0KCmRmX21lYW5zIDwtIGdldF9tZWFucyhkZi5mb3Iuc3RhdHMsIGdyb3VwX2NvbHMgPSBjKCJTYW1wbGUiLCJDZWxsVHlwZSIsIk1hcmtlciIpLCB2YWx1ZV9jb2wgPSAidmFsdWUiKQoKCmhlYWQoZGZfbWVhbnMpCmRpbShkZl9tZWFucykKCgoKCgpgYGAKCgoKCgoKCgoKCgoKCgoKClRyYWluIFJhbmRvbSBGb3Jlc3QgbW9kZWwKUmVxdWlyZXMgYSBsYWJlbGxlZCBzZXVyYXQgb2JqZWN0Ck1vcmUgY2VsbHMgd2lsbCBnaXZlIGhpZ2hlciBhY2N1cmFjeSBidXQgaW5jcmVhc2UgY29tcHV0YXRpb24gdGltZS4KUnVuIGluIEhQQyB3aXRoIGxvdHMgb2YgY2VsbHMKCgpgYGB7cn0KCnJmIDwtIFJGTV90cmFpbihzZXVyYXRlX29iamVjdCA9IHNldSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUJfbGlzdCA9IEFCLCBhbm5vdGF0aW9ucyA9IHNldSRDZWxsVHlwZTMsCiAgICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IGMoMC44LDAuMiksCiAgICAgICAgICAgICAgICAgICAgICBkb3duc2FtcGxlID0gMjAwMDAsCiAgICAgICAgICAgICAgICAgICAgICBzZWVkID0gMjIyLAogICAgICAgICAgICAgICAgICAgICAgbXl0cnkgPSBjKDE6MTApLAogICAgICAgICAgICAgICAgICAgICAgbWF4bm9kZXMgPSBjKDEyOiAyNSksCiAgICAgICAgICAgICAgICAgICAgICB0cmVlcyA9IGMoMjUwLCA1MDAsIDEwMDAsMjAwMCksCiAgICAgICAgICAgICAgICAgICAgICBzdGFydF9ub2RlID0gMTUpCgpzYXZlKHJmLCBvdXRwdXRfcGF0aCwidHJhaW5lZFJGTUZlYjE0LlJkcyIpCgpgYGAKCgo=